import request from './request'

/**
 * 查询用户收藏的商品
 * 该函数通过发送GET请求到指定接口，获取当前用户收藏的商品列表数据
 * @returns {Promise} 返回一个Promise对象，包含接口响应的用户收藏商品数据
 */
export const queryUserFavoriteProduct = () => {
  // 发送GET请求到"/favorite"接口，请求用户收藏的商品数据
  return request.get("/favorite");
};

/**
 * 根据商品ID列表移除收藏的商品
 * @param {Array<string|number>} ids - 要移除收藏的商品ID列表
 * @returns {Promise} - 返回一个Promise对象，用于处理请求的成功与失败结果
 *
 * 说明：
 * 1. 该函数通过HTTP DELETE方法请求后端接口移除商品收藏
 * 2. 使用URL查询参数传递多个商品ID，格式为?ids=id1&ids=id2&...
 * 3. 对每个ID进行encodeURIComponent编码，确保特殊字符能正确传递
 * 4. 依赖于项目中的request工具（通常是对axios等请求库的二次封装）
 */
export const removeProductFavoriteByProductIds = (ids) => {
  // 构建查询字符串：将ids数组转换为"ids=编码后的id1&ids=编码后的id2"格式
  const queryString = ids.map(id => `ids=${encodeURIComponent(id)}`).join('&');
  // 发送DELETE请求到指定接口，携带构建好的查询参数
  return request.delete(`/favorite?${queryString}`);
};

/**
 * 查询指定商品是否被当前用户收藏
 *
 * @param {string|number} productId - 商品的唯一标识ID（支持字符串或数字类型）
 * @returns {Promise<Object>} 接口请求的Promise对象
 * @resolve {Object} 成功响应对象，通常包含：
 *   - {boolean} isFavorite - 表示商品是否被收藏的状态
 *   - {string} [message] - 可选的提示信息
 * @reject {Error} 请求失败时的错误对象，可能包含网络错误或服务器返回的错误信息
 * @example
 * // 查询ID为123的商品是否被收藏
 * queryIsFavoriteProduct(123)
 *   .then(response => {
 *     if (response.isFavorite) {
 *       console.log('该商品已被收藏');
 *     } else {
 *       console.log('该商品未被收藏');
 *     }
 *   })
 *   .catch(error => {
 *     console.error('查询收藏状态失败：', error);
 *   });
 */
export const queryIsFavoriteProduct = (productId) => {
  return request.get(`/favorite/${productId}`)
}

/**
 * 向收藏夹添加商品
 * @param {string|number} productId - 要添加到收藏夹的商品ID
 * @returns {Promise} 返回一个Promise对象，用于处理请求的成功或失败结果
 * 成功时会包含服务器返回的收藏操作相关数据，失败时会包含错误信息
 */
export const addProductToCollection = (productId) => {
  // 发送POST请求到"/favorite"接口，携带商品ID参数
  return request.post("/favorite", {
    productId: productId // 要添加的商品ID
  })
}

/**
 * 从收藏夹中移除商品
 * @param {string|number} productId - 要从收藏夹中移除的商品ID
 * @returns {Promise} 返回一个Promise对象，用于处理请求的成功或失败结果
 * 成功时会包含服务器返回的取消收藏操作相关数据，失败时会包含错误信息 
 */
export const removeProductFavorite = (productId) => {
  // 发送DELETE请求到"/favorite/{productId}"接口，删除指定ID的收藏商品
  return request.delete(`/favorite/${productId}`)
}

export const queryProductFacoriteList = (page, pageSize) => {
  return request.get(`/favorite/list?page=${page}&pageSize=${pageSize}`)
}